const cryptoJS = require("crypto-js");

// 随机生成16位16进制
function getRamNumber() {
  let result = '';
  for (let i = 0; i < 16; i++) {
    result += Math.floor(Math.random() * 16).toString(16); // 获取0-15并通过toString转16进制
  }
  // 默认字母小写，手动转大写
  return result.toUpperCase() // 另toLowerCase()转小写
}

/**
 *
 * @param str
 * @param num 后几位换到前面
 * @returns {string}
 */
function changePosition(str = '', num = 0) {
  return str.substr(str.length - num) + str.substr(0, str.length - num);
}

exports.secretKey = function () {
  const nRamNumber = getRamNumber();
  // 移动后的aesKey
  return changePosition(nRamNumber, 3);
}

//加密数据
exports.aesEncrypt = function (plainText, SecretKey) {
  let encJson = cryptoJS.AES.encrypt(JSON.stringify(plainText), SecretKey).toString();
  //对加密数据进行base64处理, 原理：就是先将字符串转换为utf8字符数组，再转换为base64数据
  return cryptoJS.enc.Base64.stringify(cryptoJS.enc.Utf8.parse(encJson));
}

// 解密数据
exports.aesDecrypt = function (cipherText, SecretKey) {
  //将数据先base64还原，再转为utf8数据
  let decData = cryptoJS.enc.Base64.parse(cipherText).toString(cryptoJS.enc.Utf8);
  let decJson = cryptoJS.AES.decrypt(decData, SecretKey).toString(cryptoJS.enc.Utf8);
  return JSON.parse(decJson);
}


